/*
 * Copyright @2010 Dnbiz. All rights reserved.
 */
package com.dnbiz.api.sdk;

import com.dnbiz.api.sdk.util.RequestUtil;

/**
 * <pre>
 * Api相关操作
 * </pre>
 * @author HuangFeng(2010-11-24)
 */
public class ApiUtil {

	private ApiUtil()
	{
	}
	
	/**
	 * <pre>
	 * 获得API返回内容(多个APIs则返回第一个API内容)
	 * 当mehtod为空时，<code>throw new NullPointerException("方法不能为空")</code>
	 * 当params为空时，<code>throw new NullPointerException("参数不能为空")</code>
	 * </pre>
	 * @author HuangFeng(2010-11-24)
	 * @param method 调用API方法  <code>not null</code>
	 * @param params Api其他参数 <code>not null</code>
	 * @return API内容(多个APIs则返回第一个API内容)
	 * @throws ApiException 
	 */
	public static ApiResult get(String method,  ApiParameter<String, Object> params) throws ApiException
	{
		return RequestUtil.get(ApiURL.get(method, params));
	}
	
	
	/**
	 * <pre>
	 * 获得API返回内容(多个APIs则返回第一个API内容)
	 * 当mehtod为空时，<code>throw new NullPointerException("方法不能为空")</code>
	 * 当params或values为空时，<code>throw new NullPointerException("参数不能为空")</code>
	 * 当params.length != values.length ，<code>throw new ArrayIndexOutOfBoundsException("参数名和参数值不相等")</code>
	 * </pre>
	 * @author HuangFeng(2010-11-24)
	 * @param method 调用API方法  <code>not null</code>
	 * @param params Api参数名 <code>not null</code>
	 * @param values Api参数值 <code>not null</code>
	 * @return API内容(多个APIs则返回第一个API内容)
	 * @throws ApiException 
	 */
	public static ApiResult get(String method, String[] params, String[] values) throws ApiException
	{
		return RequestUtil.get(ApiURL.get(method, params, values));
	}
	
	/**
	 * <pre>
	 * 获得API返回内容(多个APIs则返回第一个API内容)
	 * 当mehtod为空时，<code>throw new NullPointerException("方法不能为空")</code>
	 * 当param或value为空时，<code>throw new NullPointerException("参数不能为空")</code>
	 * </pre>
	 * @author HuangFeng(2010-11-24)
	 * @param method 调用API方法  <code>not null</code>
	 * @param param Api参数名 <code>not null</code>
	 * @param value Api参数值 <code>not null</code>
	 * @return API内容(多个APIs则返回第一个API内容)
	 * @throws ApiException 
	 */
	public static ApiResult get(String method, String param, String value) throws ApiException
	{
		return RequestUtil.get(ApiURL.get(method, param, value));
	}

	public static ApiResult post(String method, ApiParameter<String, String> params) throws ApiException {
		return RequestUtil.post(ApiURL.get(method), params);
	}
	
	public static ApiResult post(String method, String param, String value) throws ApiException {
		ApiParameter<String, String> params = new ApiParameter<String, String>();
		params.put(param, value);
		return RequestUtil.post(ApiURL.get(method), params);
	}
	
	public static ApiResult upload(String method, ApiParameter<String, String> params, ApiParameter<String, ApiFile> fileParams) throws ApiException
	{
		return RequestUtil.upload(ApiURL.upload(method), params, fileParams);
	}
}
